// API请求工具

// 服务器基础URL
const BASE_URL = 'https://sc.xrilang.top/api';

// 检查服务器连接状态
let serverConnected = false;

// 检查服务器是否可用
const checkServer = () => {
  return new Promise((resolve) => {
    wx.request({
      url: `${BASE_URL}`,
      method: 'GET',
      timeout: 3000,
      success: (res) => {
        if (res.statusCode === 200 && res.data && res.data.success) {
          serverConnected = true;
          resolve(true);
        } else {
          serverConnected = false;
          resolve(false);
        }
      },
      fail: () => {
        serverConnected = false;
        resolve(false);
      }
    });
  });
};

// 获取服务器状态
const getServerStatus = () => {
  return serverConnected;
};

// 获取当前服务器URL
const getCurrentServerUrl = () => {
  return BASE_URL;
};

/**
 * 发送HTTP请求
 * @param {string} url - 请求URL
 * @param {string} method - 请求方法
 * @param {object} data - 请求数据
 * @returns {Promise} - 请求结果
 */
const request = (url, method, data) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${BASE_URL}${url}`,
      method,
      data,
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data);
        } else {
          reject({
            message: res.data.message || '请求失败',
            statusCode: res.statusCode,
            data: res.data
          });
        }
      },
      fail: (err) => {
        reject({
          message: '网络请求失败',
          error: err
        });
      }
    });
  });
};

/**
 * 上传图片到服务器
 * @param {string} filePath - 本地文件路径
 * @returns {Promise} - 上传结果
 */
const uploadImage = (filePath) => {
  console.log('开始上传图片:', filePath);
  
  // 检查文件是否存在
  return new Promise((resolve, reject) => {
    wx.getFileInfo({
      filePath: filePath,
      success: (fileInfo) => {
        console.log('文件信息:', fileInfo);
        
        // 检查文件大小
        const fileSizeInMB = fileInfo.size / (1024 * 1024);
        if (fileSizeInMB > 5) {
          console.warn(`文件大小(${fileSizeInMB.toFixed(2)}MB)超过5MB，可能上传失败`);
        }
        
        // 尝试压缩图片
        if (fileSizeInMB > 1) {
          console.log('尝试压缩图片...');
          wx.compressImage({
            src: filePath,
            quality: 80,
            success: (compressRes) => {
              console.log('图片压缩成功，使用压缩后的图片上传');
              doUpload(compressRes.tempFilePath);
            },
            fail: (err) => {
              console.warn('图片压缩失败，使用原图上传:', err);
              doUpload(filePath);
            }
          });
        } else {
          // 小图片直接上传
          doUpload(filePath);
        }
        
        function doUpload(path) {
          console.log('执行上传，路径:', path);
          
          // 创建上传任务
          const uploadTask = wx.uploadFile({
            url: `${BASE_URL}/upload`,
            filePath: path,
            name: 'image', // 确保与服务器端multer配置中的字段名一致
            formData: {
              'user': 'test_user',
              'timestamp': Date.now().toString()
            },
            header: {
              'content-type': 'multipart/form-data',
              'accept': 'application/json'
            },
            timeout: 60000, // 设置60秒超时
            success: (res) => {
              console.log('上传响应:', res);
              
              if (res.statusCode >= 200 && res.statusCode < 300) {
                try {
                  const data = JSON.parse(res.data);
                  console.log('解析后的响应数据:', data);
                  resolve(data);
                } catch (error) {
                  console.error('解析响应数据失败:', error, '原始数据:', res.data);
                  reject({
                    message: '解析响应数据失败',
                    error,
                    rawData: res.data
                  });
                }
              } else {
                console.error('上传失败, 状态码:', res.statusCode, '响应数据:', res.data);
                reject({
                  message: `上传失败，状态码: ${res.statusCode}`,
                  statusCode: res.statusCode,
                  data: res.data
                });
              }
            },
            fail: (err) => {
              console.error('上传请求失败:', err);
              reject({
                message: '网络请求失败',
                error: err
              });
            }
          });
          
          // 监听上传进度
          uploadTask.onProgressUpdate((res) => {
            console.log('上传进度:', res.progress + '%');
            // 可以在这里更新上传进度UI
          });
        }
      },
      fail: (err) => {
        console.error('获取文件信息失败:', err);
        reject({
          message: '获取文件信息失败，文件可能不存在或无法访问',
          error: err
        });
      }
    });
  });
};

/**
 * 处理图片
 * @param {string} imagePath - 图片路径
 * @returns {Promise} - 处理结果
 */
const processImage = (imagePath) => {
  return request('/process', 'POST', { imagePath });
};

/**
 * 合并多张图片为长图
 * @param {string[]} imagePaths - 图片路径数组
 * @returns {Promise} - 合并结果
 */
const mergeImages = (imagePaths) => {
  return request('/merge', 'POST', { imagePaths });
};

/**
 * 生成PDF
 * @param {string[]} imagePaths - 图片路径数组
 * @param {string} title - PDF标题
 * @returns {Promise} - PDF生成结果
 */
const generatePDF = (imagePaths, title) => {
  return request('/generate-pdf', 'POST', { imagePaths, title });
};

module.exports = {
  uploadImage,
  processImage,
  mergeImages,
  generatePDF,
  getCurrentServerUrl,
  checkServer,
  getServerStatus
};
